In the event of technical difficulties with Szkopuł, please contact us via email at [email protected].
If you would like to talk about tasks, solutions or technical problems, please visit our Discord servers. They are moderated by the community, but members of the support team are also active there.
Na pochylni na nabrzeżu portowym są ułożone w przypadkowej kolejności beczki w trzech kolorach: czerwone, zielone i niebieskie. Trzeba je uporządkować, za pomocą dźwigu w taki sposób, aby na początku (najniżej) były czerwone, następnie niebieskie, a na końcu (najwyżej) zielone.
Dźwig - w jednym ruchu - może podnieść do góry jednocześnie trzy sąsiednie beczki w dowolnym miejscu na pochylni i przenieść je na koniec, za beczki leżące powyżej, które stoczą się pod własnym ciężarem w dół wypełniając lukę.
Trzeba ułożyć plan pracy dźwigu dyktujący w kolejnych ruchach, którą trójkę beczek przenieść na koniec.
Ułożenie beczek na pochylni zapisujemy za pomocą ciągu liter , , , gdzie to liczba beczek. Litery , , w tym ciągu symbolizują odpowiednio beczkę czerwoną, niebieską lub zieloną. Zakładamy, że liczba beczek jest nie większa niż oraz, że na pochylni są przynajmniej beczki zielone.
Plan porządkowania beczek za pomocą dźwigu można zapisać w postaci skończonego ciągu liczb całkowitych dodatnich nie większych niż . Kolejny -ty wyraz ciągu to pozycja (licząc od dołu) najniższej z trzech beczek, jakie należy przenieść na koniec w -tym ruchu.
9 beczek ułożonych na pochylni w kolejności: (czerwona, zielona, niebieska, niebieska, czerwona, niebieska, zielona, zielona, niebieska) zapisujemy za pomocą ciągu: .
Dźwig pracujący według planu będzie zmieniał ich ułożenie w następujący sposób: , , i po trzech ruchach uporządkuje je w kolejności czerwone-niebieskie-zielone.
Napisz program, który:
Dla każdego ułożenia początkowego beczek (jeśli są przynajmniej trzy beczki zielone) istnieje wiele planów ich porządkowania w kolejności czerwone-niebieskie-zielone. Mogą się one różnić liczbą ruchów. Twój program powinien znaleźć i wypisać tylko jeden z nich. Liczba ruchów nie musi być minimalna, aby rozwiązanie było poprawne. Powinieneś jednak dążyć do tego by Twój program układał plany porządkowania beczek w możliwie małej liczbie ruchów i aby znajdował je możliwie jak najszybciej.
Dla danych wejściowych:
9 c z n n c n z z n
poprawną odpowiedzią jest:
6 2 5
Autor zadania: Andrzej Walat.